package 数组;

public class TwoArraysTest {
    public static void main(String[] args) {
        //1.如何理解二维数组？
        //数组属于引用类型，数组的元素也可以使引用类型。
        // 对于二维数组的理解，我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
        // 其实，从数组底层的运行机制来看，其实没有多维数组。

        //2.二维数组的声明和初始化
        int[] arr = new int[]{1,2,3};//一维数组对比
        //静态初始化
        int[][] arr1 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        //动态初始化1
        String[][] arr2 = new String[3][2];
        //动态初始化2
        String[][] arr3 = new String[3][];

        //错误的情况
//		String[][] arr4 = new String[][];
//		String[][] arr5 = new String[][4];
//		String[][] arr6 = new String[4][3]{{1,2,3},{4,5,6},{7,8,9}};

        //正确的情况：
        int arr4[][] = new int[][]{{1,2,3},{4,5,12,6},{7,8,9}};
        int[] arr5[] = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        int[][] arr6 = {{1,2,3},{4,5,6},{7,8,9}};

        //3.如何调用数组的指定位置的元素
        System.out.println(arr1[0][1]);	//2
        System.out.println(arr2[1][1]);	//null

        arr3[1] = new String[4];	//定义arr3的[1]为长度为4的字符数组
        System.out.println(arr3[1][0]);	//没有上句，会报错
        System.out.println(arr3[0]);//

        //4.获取数组的长度
        System.out.println(arr4.length);	//3
        System.out.println(arr4[0].length);	//3
        System.out.println(arr4[1].length);	//4

        //5.如何遍历二维数组
        for(int i = 0;i < arr4.length;i++){
            for(int j = 0;j < arr4[i].length;j++){
                System.out.print(arr4[i][j] + " ");
            }
            System.out.println();
        }
        //6.二维数组元素的默认初始化值
        /*
         * 二维数组的使用：
         * 	规定：二维数组分为外层数组的元素，内层数组的元素
         * 	int[][] arr = new int[4][3];
         *  外层元素:arr[0],arr[1]等
         *  内层元素:arr[0][0],arr[1][2]等
         *
         * 	⑤ 数组元素的默认初始化值
         * 	针对于初始化方式一：比如：int[][] arr = new int[4][3];
         * 		外层元素的初始化值为：地址值
         * 		内层元素的初始化值为：与一维数组初始化情况相同
         *
         * 针对于初始化方式而：比如：int[][] arr = new int[4][];
         * 		外层元素的初始化值为：null
         * 		内层元素的初始化值为：不能调用，否则报错。
         *
         * 	⑥ 数组的内存解析
         */
    }
}
